#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
    fprintf(stdout, "C: hello fprintf\n");
    printf("C: hello printf\n");
    fputs("C: hello fputs\n", stdout);
    const char *str = "system call: hello write\n";
    write(1, str, strlen(str));

    fork(); //注意fork的位置,本来放在fork之后的代码才会在父子进程共享，但是当指令是 ./myfile > log.txt时，居然发现除了write之外的语句
    //其他的语句都打印了两次。因为刷新缓冲区的方式有多种，重定向到磁盘文件意味系统对数据的刷新方式是全缓冲，fork执行时，数据还在缓冲区
    //C/C++会提供自己的缓冲区，而进程退出时会刷新语言级别的缓冲区，就把两次打印的结果输出到log.txt，而write是系统调用，直接向
    //操作系统的文件缓冲区写入，不需要先把数据放到语言级别的缓冲区
    return 0;
}
